# -*- coding: utf-8 -*-
# @Time    : 2019/3/1 16:30
# @Author  : z.t.b
# @Email   : zhtbin@163.com
# @File    : lengthOfLongSubstring2.py.py
# @Software: PyCharm
"""
给定一个字符串，请你找出其中不含有重复字符的 最长子串 的长度。

示例 1:

输入: "abcabcbb"
输出: 3
解释: 因为无重复字符的最长子串是 "abc"，所以其长度为 3。
示例 2:

输入: "bbbbb"
输出: 1
解释: 因为无重复字符的最长子串是 "b"，所以其长度为 1。
示例 3:

输入: "pwwkew"
输出: 3
解释: 因为无重复字符的最长子串是 "wke"，所以其长度为 3。
     请注意，你的答案必须是 子串 的长度，"pwke" 是一个子序列，不是子串。
"""


class Solution(object):


    def lengthOfLongestSubstring(self, str):
        char_index = {}
        ans = 0
        i = 0
        n = len(str)
        for j in range(n):
            if str[j] in char_index.keys():
                i = max(char_index[str[j]], i)
            ans = max(ans, j-i+1)
            char_index[str[j]] = j+1

        return ans


solution = Solution()
print(solution.lengthOfLongestSubstring("abcabcad"))
